<%-- 
    Document   : page
    Created on : 2014/8/21, 上午 09:31:07
    Author     : Felix
--%>

<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean class="dao.BaseDAO" id="y"/>
<!DOCTYPE html>
<!-- 步驟1. 算資料總數
         步驟2. 定義好一頁的筆數
         步驟3.共有幾頁
         步驟4.如何顯示指定頁碼中的資料
         select count(*) as total from person  <= sql算總數語法 as total這段可取欄位別名    
         select * from person limit 0,10  <= 從第0筆顯示 每次顯示10筆    -->
<%
        String username = request.getParameter("username");//獲取搜尋條件的資料
        String where ="";
        if(username != null && !"".equals(username.trim())){//username不等於null且不等於空字串
            where = "where username like '%"+username+"%'";//模糊查詢
        }
        String sql="select count(*) as total from person "+where;//sql查詢資料庫資料語法，多加搜尋條件 sql語法person後要多一個空格
        String ary[]={};
        ArrayList list = y.query(sql, ary);
        String total =(String)((HashMap)list.get(0)).get("total");//總共幾筆 從list索引0找出資料轉成hashmap再從total取得資料，因為為object型態所以要再轉成String並指定給變數total
        int pagesize = 10;//步驟2 每頁的頁數
        int pages = Integer.parseInt(total)/pagesize;////步驟3(總頁數) 因total為String，所以須取得資料轉成int，再除以pagesize
        if(Integer.parseInt(total)%pagesize != 0)
                pages++;//例 35*10=3.5 轉int會等於3 還有五筆資料消失，所以這裡設成餘數不等於0時，頁數增加一頁來顯示餘數的資料
        String pageNo= request.getParameter("pageNo");//使用者指定的頁數
        if(pageNo == null){//使用者第一次進入頁面時，所以將頁數指定在第一頁
             pageNo="1";
        }
        int index = (Integer.parseInt(pageNo) -1) * pagesize;//資料庫中開始的位置
        sql="select * from person "+where+" limit "+ index +", "+ pagesize;//多加搜尋條件 sql語法limit後要多一個空格
        //ary=new String[]{index+"" , pagesize+""  };
        list = y.query(sql, ary);
        System.out.println(list);
        int lastPage = Integer.parseInt(pageNo) ==1? 1 : Integer.parseInt(pageNo)-1; //當所在頁數為第一頁時，按上一頁還是回到第一頁，如果不是就減一頁至上一頁 
        int nextPage = Integer.parseInt(pageNo) ==pages? pages : Integer.parseInt(pageNo)+1;//當所在頁數為最後一頁，按下一頁還是回到總頁數(最後一頁)，如果不是就加一至下一頁
        Class.forName("com.mysql.jdbc.Driver");//載入驅動程式類別
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/javadb","root","root");//取得connection實作物件，是資料庫連線代表物件
        String id = request.getParameter("pageNo");
    %>
    <c:set var="list" value="<%=list%>"/>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
        <script>
            function lastPage(x){
         　   
                  document.getElementById('pageNo').value=x;//抓下面表單的的id並設定值
                  document.getElementById('form1').submit();
                  
            }
            function nextPage(x){
               
                  document.getElementById('pageNo').value=x;//抓下面表單的的id並設定值
                  document.getElementById('form1').submit();
            }
        </script>
    </head>
    <body>
        <h1>Hello Page!</h1>
        
        <form action="page.jsp" id="form1" >        
            查詢資料：<input type="text" name="username" value="${param.username}"><!--加上values後面的值，讓搜尋完後，所設的條件還存在於表格內-->
            <input type="hidden" name="pageNo" id="pageNo" value="1">
            <input type="submit">
        </form>
            
        <input type="button" value="上一頁" onclick="lastPage(<%=lastPage%>)"> 
        <!--<a href="page.jsp?pageNo=<%=lastPage%>">上一頁</a>-->
        總共<%= total%>筆，目前頁碼<%=pageNo%>，每頁<%=pagesize%>筆，共有<%=pages%>頁
        <!--<a href="page.jsp?pageNo=<%=nextPage%>">下一頁</a><br><br>-->
        <input type="button" value="下一頁" onclick="nextPage(<%=nextPage%>)"><br> 
       
        <c:forEach var="x" items="${list}"><!--items為選取資料來源-->
            ${x.id} , ${x.username} , ${x.tel} , ${x.birthday} <br><!--el語法-->   
        </c:forEach>
        
    </body>
</html>
